package cn.iocoder.yudao.module.system.service.gugu;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.gugu.gugu.CollegeScoreInfo;
import cn.iocoder.yudao.module.system.controller.admin.gugu.vo.CollegeScorePageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.gugu.CollegeScoreDO;

import java.util.List;
import java.util.Map;

/**
 * 历年高考高校录取分数线数据 Service 接口
 */
public interface CollegeScoreService {

    /**
     * 保存高校录取分数线数据
     *
     * @param collegeScoreList 高校录取分数线数据列表
     * @return 保存成功的数量
     */
    int saveCollegeScoreList(List<CollegeScoreInfo> collegeScoreList);

    /**
     * 根据省份、年份和高校名称查询高校录取分数线数据
     *
     * @param province 省份
     * @param year 年份
     * @param collegeName 高校名称
     * @return 高校录取分数线数据列表
     */
    List<CollegeScoreDO> getCollegeScoreList(String province, Integer year, String collegeName);

    /**
     * 根据省份查询高校录取分数线数据
     *
     * @param province 省份
     * @return 高校录取分数线数据列表
     */
    List<CollegeScoreDO> getCollegeScoreByProvince(String province);

    /**
     * 根据年份查询高校录取分数线数据
     *
     * @param year 年份
     * @return 高校录取分数线数据列表
     */
    List<CollegeScoreDO> getCollegeScoreByYear(Integer year);

    /**
     * 根据高校名称查询高校录取分数线数据
     *
     * @param collegeName 高校名称
     * @return 高校录取分数线数据列表
     */
    List<CollegeScoreDO> getCollegeScoreByCollegeName(String collegeName);

    /**
     * 根据高校UUID查询高校录取分数线数据
     *
     * @param schoolUuid 高校UUID
     * @return 高校录取分数线数据列表
     */
    List<CollegeScoreDO> getCollegeScoreBySchoolUuid(String schoolUuid);

    /**
     * 分页查询高校录取分数线数据
     *
     * @param reqVO 查询条件
     * @return 分页结果
     */
    PageResult<CollegeScoreDO> getCollegeScorePage(CollegeScorePageReqVO reqVO);

    /**
     * 检查指定条件的数据是否已存在
     *
     * @param province 省份
     * @param year 年份
     * @param schoolUuid 高校UUID
     * @param admissionBatch 录取批次
     * @param typeName 文科理科类型
     * @return 是否存在
     */
    boolean existsCollegeScore(String province, Integer year, String schoolUuid, String admissionBatch, String typeName);

    /**
     * 从API获取高校录取分数线数据并保存到数据库
     *
     * @param appkey API密钥
     * @param searchtype 查询条件类型
     * @param keyword 关键字
     * @param year 年份
     * @param pageindex 页码
     * @param pagesize 每页大小
     * @return 获取结果
     */
    Map<String, Object> fetchAndSaveCollegeScore(String appkey, String searchtype, String keyword, Integer year, Integer pageindex, Integer pagesize);

    /**
     * 根据省份、年份、高校UUID、录取批次和文科理科类型删除数据
     *
     * @param province 省份
     * @param year 年份
     * @param schoolUuid 高校UUID
     * @param admissionBatch 录取批次
     * @param typeName 文科理科类型
     * @return 删除的记录数
     */
    int deleteCollegeScore(String province, Integer year, String schoolUuid, String admissionBatch, String typeName);

    /**
     * 根据年份删除数据
     *
     * @param year 年份
     * @return 删除的记录数
     */
    int deleteCollegeScoreByYear(Integer year);

    /**
     * 创建高校录取分数线数据
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createCollegeScore(CollegeScoreDO createReqVO);

    /**
     * 更新高校录取分数线数据
     *
     * @param updateReqVO 更新信息
     */
    void updateCollegeScore(CollegeScoreDO updateReqVO);

    /**
     * 删除高校录取分数线数据
     *
     * @param id 编号
     */
    void deleteCollegeScore(Long id);

    /**
     * 获得高校录取分数线数据
     *
     * @param id 编号
     * @return 高校录取分数线数据
     */
    CollegeScoreDO getCollegeScore(Long id);
}
